<?php

use think\facade\Db;
use app\common\model\User;

/**
 * 会员编号随机数
 */
function generate($length = 6, $prefix = '', $type = 1, $filed = 'code')
{
    if ($type == 1) {
        $code = rand(100000, 999999);
    } else {
        $chars = array('Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Z', 'X', 'C', 'V', 'B', 'N', 'M');
        $keys = array_rand($chars, $length);
        $code = '';
        for ($i = 0; $i < $length; $i++) {
            $code .= $chars[$keys[$i]];
        }
    }
    if ($prefix) {
        $code = $prefix . $code;
    }

    $is = User::where($filed, $code)->count();
    if ($is) {
        return generate($length, $prefix, $type, $filed);
    } else {
        return $code;
    }
}

/**
 * 格式化字节大小
 */
function format_bytes($size, $delimiter = '')
{
    $units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];
    for ($i = 0; $size >= 1024 && $i < 5; $i++) {
        $size /= 1024;
    }
    return $size . $delimiter . $units[$i];
}

/**
 * 清除文件
 */
function deldir($path)
{
    //如果是目录则继续
    if (is_dir($path)) {
        //扫描一个文件夹内的所有文件夹和文件并返回数组
        $p = scandir($path);
        foreach ($p as $val) {
            //排除目录中的.和..
            if ($val != "." && $val != "..") {
                //如果是目录则递归子目录，继续操作
                if (is_dir($path . $val)) {
                    //子目录中操作删除文件夹和文件
                    deldir($path . $val . '/');
                    //目录清空后删除空文件夹
                    @rmdir($path . $val . '/');
                } else {
                    //如果是文件直接删除
                    unlink($path . $val);
                }
            }
        }
    }
}

/**
 * 格式化富文本内容
 */
function handleRichText($content)
{
    $url = request()->domain();
    $pregRule = "/<[img|IMG].*?src=[\'|\"](.*?(?:[\.jpg|\.jpeg|\.png|\.gif|\.bmp]))[\'|\"].*?[\/]?>/";
    $content = preg_replace($pregRule, '<img src="' . $url . '${1}" style="max-width:100%">', htmlspecialchars_decode($content));

    return str_replace('\\', '', $content);
}

/**
 * 根据一定数量元素数组随机组合
 */
function randomArray($arr, $length)
{
    shuffle($arr);
    return array_chunk($arr, $length);
}

/**
 * 随机获取数组中一定数量的数据
 */
function getRandomArrayElements($array, $count)
{
    if ($count <= 0) return [];
    shuffle($array);
    $keys = array_rand($array, $count);
    $results = [];
    if ($count > 1) {
        foreach ($keys as $key) {
            $results[] = $array[$key];
        }
    } else {
        $results[] = $array[$keys];
    }

    return $results;
}

/**
 * 截取字符串
 */
function cut_str($str, $len)
{
    if (strlen($str) > $len) {
        $str = mb_substr($str, 0, $len) . '...';
    }

    return $str;
}

/**
 * 隐藏手机号
 */
function hideMobile($mobile)
{
    return preg_replace('/^(\d{3})(\d{4})(\d{4})$/', '\1****\3', $mobile);
}

/*
 * 隐藏姓名
 */
function hideName($name)
{
    $doubleSurname = [
        '欧阳', '太史', '端木', '上官', '司马', '东方', '独孤', '南宫',
        '万俟', '闻人', '夏侯', '诸葛', '尉迟', '公羊', '赫连', '澹台', '皇甫', '宗政', '濮阳',
        '公冶', '太叔', '申屠', '公孙', '慕容', '仲孙', '钟离', '长孙', '宇文', '司徒', '鲜于',
        '司空', '闾丘', '子车', '亓官', '司寇', '巫马', '公西', '颛孙', '壤驷', '公良', '漆雕', '乐正',
        '宰父', '谷梁', '拓跋', '夹谷', '轩辕', '令狐', '段干', '百里', '呼延', '东郭', '南门', '羊舌',
        '微生', '公户', '公玉', '公仪', '梁丘', '公仲', '公上', '公门', '公山', '公坚', '左丘', '公伯',
        '西门', '公祖', '第五', '公乘', '贯丘', '公皙', '南荣', '东里', '东宫', '仲长', '子书', '子桑',
        '即墨', '达奚', '褚师', '吴铭'
    ];
    $surname = mb_substr($name, 0, 2);
    if (in_array($surname, $doubleSurname)) {
        $name = mb_substr($name, 0, 2) . str_repeat('*', (mb_strlen($name, 'UTF-8') - 2));
    } else {
        $name = mb_substr($name, 0, 1) . str_repeat('*', (mb_strlen($name, 'UTF-8') - 1));
    }

    return $name;
}

function queryIp($ip)
{

    $url = "http://whois.pconline.com.cn/jsFunction.jsp?ip=" . $ip;
    $ch = curl_init();
    //设置选项，包括URL
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);

    //执行并获取HTML文档内容
    $output = curl_exec($ch);
    //释放curl句柄
    curl_close($ch);
    $info = iconv('GB2312', 'UTF-8', $output); //因为是js调用 所以接收到的信息为字符串，注意编码格式

    return get_between($info, "('", "',");
}

function get_between($input, $start, $end)
{
    $substr = substr($input, strlen($start) + strpos($input, $start), (strlen($input) - strpos($input, $end)) * (-1));
    return $substr;
}

function getCount($fetchSql)
{
    $fetchSql = "SELECT count(*) as tp_count " . strstr($fetchSql, "FROM");
    return Db::query($fetchSql)[0]['tp_count'];
}

function getOperation($name)
{
    switch ($name) {
        case "save":
            return '修改';
        case "create":
            return '新增';
        case "update":
            return '更新状态';
        case "updateAll":
            return '批量更新状态';
        case "delete":
            return '删除';
        case "deleteAll":
            return '批量删除';
        default:
            return '操作';
    }
}

function getNotifyType($name)
{
    switch ($name) {
        case 1:
            return '订单通知';
        case 2:
            return '注册通知';
        default:
            return '系统通知';
    }
}

function getWeekTwo($value)
{
    switch (intval($value)) {
        case 1:
            return '一';
        case 2:
            return '二';
        case 3:
            return '三';
        case 4:
            return '四';
        case 5:
            return '五';
        case 6:
            return '六';
        default:
            return '日';
    }
}

/**
 * 位置
 */
function getPosition($key = '')
{
    $arr = [
        1 => '首页'
    ];
    if ($key) {
        return $arr[$key];
    }

    return $arr;
}

/**
 * 审核状态
 */
function getExamineStatus($key = '')
{
    $arr = [
        1 => '待审核',
        2 => '已通过',
        3 => '已驳回'
    ];
    if ($key) {
        return $arr[$key];
    }

    return $arr;
}

/**
 * 奖金类型
 */
function getBonusTitle($type)
{
    if ($type == 1) {
        $arr = [
            1 => '推荐收益',
            2 => '团队收益',
            3 => '平级收益'
        ];
    } else {
        $arr = [
            'sum_1' => '推荐收益',
            'sum_2' => '团队收益',
            'sum_3' => '平级收益'
        ];
    }

    return $arr;
}

/**
 * 支付方式信息
 */
function getPaymentMethod($arr)
{
    $method = [];
    foreach ($arr as $val) {
        $method[] = [
            'icon' => '/static/admin/img/' . $val . '.png',
            'title' => get_pay_way($val),
            'type' => $val,
            'is_pay_password' => in_array($val, ['wechat', 'alipay']) ? 0 : 1
        ];
    }

    return $method;
}

/**
 * 支付方式
 */
function get_pay_way($value)
{
    switch ($value) {
        case "":
            return '-';
        case "bank":
            return '银行卡';
        case "wechat":
            return '微信';
        case "alipay":
            return '支付宝';
        default:
            $assets = \app\common\model\Assets::getFields(3);
            return $assets[$value];
    }
}

/**
 * 订单状态
 */
function getOrderStatus($key = '')
{
    $arr = [
        1 => '待支付',
        2 => '待发货',
        3 => '待收货',
        5 => '已完成',
        6 => '已取消'
    ];
    if ($key) {
        return $arr[$key];
    }

    return $arr;
}
